feat(designer-v2): add node navigation and retain details tabs - #9621
Conversation
Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
🤖 AI PR Validation ReportPR Review ResultsThank you for your submission! Here's detailed feedback on your PR title and body compliance:✅ PR Title
✅ Commit Type
✅ Risk Level
✅ What & Why
✅ Impact of Change
✅ Test Plan
✅ Contributors
✅ Screenshots/Videos
Summary Table
All checks pass — this PR is compliant with the team template and the declared Medium risk matches the code impact. Good to merge.Powered by: Copilot CLI (claude-opus-4.8) | Last updated: Wed, 16 Sep 2026 17:11:07 GMT |
Standalone previewPreview reconciliation failed. Check the Reconcile Standalone Ephemeral workflow logs; rerun it after resolving the error. Current PR revision: Local workflows only. Azure sign-in, live Azure resources, and the development-only template proxy are not available. This preview runs PR code; do not enter credentials or sensitive workflow data. |
There was a problem hiding this comment.
🟡 Changes recommended
Browser checks currently fail because panel focus overrides card focus, stopping traversal, while the offscreen test setup also fails its precondition.
Get a fresh assessment by requesting another Copilot review.
Pull request overview
Adds keyboard-based node traversal and preserves operation-details tab selection across both designer versions.
Changes:
- Adds Ctrl/Cmd+Up/Down node navigation using React Flow ordering.
- Preserves preferred details tabs and remounts node-specific panel content.
- Adds shared unit tests, integration tests, E2E coverage, and documentation.
File summaries
| File | Description |
|---|---|
libs/logic-apps-shared/src/utils/src/lib/helpers/nodeNavigation.ts |
Implements adjacent-node lookup. |
libs/logic-apps-shared/src/utils/src/lib/helpers/index.ts |
Exports the navigation helper. |
libs/logic-apps-shared/src/utils/src/lib/helpers/__test__/nodeNavigation.spec.ts |
Tests navigation ordering and filtering. |
libs/designer/src/lib/ui/NodeNavigation.tsx |
Adds v1 navigation hotkeys. |
libs/designer/src/lib/ui/DesignerReactFlow.tsx |
Mounts navigation and enables offscreen rendering. |
libs/designer/src/lib/ui/CustomNodes/ScopeCardNode.tsx |
Supports tagged scope focus IDs. |
libs/designer/src/lib/ui/__test__/nodeNavigationTestSuite.tsx |
Provides shared navigation tests. |
libs/designer/src/lib/ui/__test__/NodeNavigation.spec.tsx |
Runs the suite against v1. |
libs/designer/src/lib/ui/__test__/keyboardNavigation.spec.tsx |
Updates keyboard-navigation test context. |
libs/designer/src/lib/ui/__test__/DesignerReactFlow.spec.tsx |
Tests navigation mounting and rendering fallback. |
libs/designer/src/lib/core/state/workflow/workflowSelectors.ts |
Recognizes normalized and canvas node IDs. |
libs/designer/src/lib/core/state/panel/panelSlice.ts |
Retains the selected details tab. |
libs/designer-v2/src/lib/ui/NodeNavigation.tsx |
Adds v2 navigation hotkeys. |
libs/designer-v2/src/lib/ui/DesignerReactFlow.tsx |
Mounts v2 navigation and rendering fallback. |
libs/designer-v2/src/lib/ui/CustomNodes/ScopeCardNode.tsx |
Supports tagged v2 scope focus IDs. |
libs/designer-v2/src/lib/ui/__test__/NodeNavigation.spec.tsx |
Runs the shared suite against v2. |
libs/designer-v2/src/lib/ui/__test__/DesignerReactFlow.spec.tsx |
Tests v2 navigation integration. |
libs/designer-v2/src/lib/core/state/workflow/workflowSelectors.ts |
Recognizes both scope ID forms. |
libs/designer-v2/src/lib/core/state/panel/panelSlice.ts |
Retains tabs across v2 selection changes. |
libs/designer-ui/src/lib/panel/panelcontent.tsx |
Adds tab fallback and node-keyed content. |
e2e/ephemeral/preview.spec.ts |
Exercises navigation in browser previews. |
apps/Standalone/README.md |
Documents shortcuts and tab retention. |
Review details
- Files reviewed: 22/22 changed files
- Comments generated: 3
- Review effort level: Balanced
💡 Add a code-review agent skill or configure MCP servers for context-aware, tailored reviews. Learn more in the docs.
📊 Coverage CheckThe following changed files need attention:
Please add tests for the uncovered files before merging. |
Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
Allow navigation from non-editing controls in the selected node's details panel while preserving editor and unrelated-panel scope. Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
Restore legacy selection and shared panel defaults while keeping navigation and tab retention opt-in for designer v2. Add real legacy ScopeCardNode coverage and browser regressions for v1 isolation. Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
Record the intentional default-false props passed to panel header and content. Preserve legacy behavior and fix the unit suite that blocked coverage. Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
Exercise the real component navigation opt-in, menu actions, title and parameter validation, pinned-panel closing, run resubmission, and child-workflow monitoring. Achieve 100% whole-file line coverage without production changes or exclusions. Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
Commit Type
Risk Level
What & Why
Add Ctrl/Cmd+Down and Ctrl/Cmd+Up node selection only in designer v2, following the existing positive React Flow nodeIndex order without wrapping at endpoints. Normalize scope IDs and mount offscreen targets using the existing keyboard rendering fallback before focusing them without native container scrolling.
Retain the active operation-details tab across v2 node selections, with a first-available fallback and remembered preference. Key v2 panel content by node to isolate editor drafts. Shortcuts work after an ordinary card click, including when the selected node's details panel Close button or tabs have focus.
Legacy navigation and tab-reset behavior are restored. Shared panel behavior defaults to the original behavior; only v2 explicitly opts into the new focus ordering, tab fallback, and node-keyed content. Real legacy ScopeCardNode and v2 NodeDetailsPanel tests address the reported zero-coverage files without production changes.
Impact of Change
Test Plan
/and/v2, Chromium, Ctrl and Cmd/Meta.Local verification:
c5631714b: 233 targeted unit tests, 12/12 production-browser tests with zero retries, and 9/9 production build tasks, including declarations.ScopeCardNode.tsx: 38 tests; 134/134 lines (100%), 26/26 functions, 111/112 branches (99.1%).26db21c17: two expected default-false props; 31 related panel tests passed.nodeDetailsPanel.tsxcorrectione127a8007: 24 real component tests; 89/89 lines (100%), 24/25 functions (96%), 54/56 branches (96.42%). Combined component/hook/navigation run: 107 tests across four suites passed; zero new-test TypeScript diagnostics. No exclusions or threshold changes.c5631714bverify both routes with Ctrl/Meta. Subsequent commits are test-only. Biome and commit hooks passed.Remote status verified on
e127a80075eba483a544a345542c826551abae22:e2e/templates/createWorkflowPanel.spec.ts:45. Update-button assertions time out; its rendered modal is markedaria-hidden=true. This intermittent failure also reproduces locally, but no connection to navigation changes is established. Template production paths are unchanged; no speculative product fix, longer timeout, or weakened assertion was retained. The same template suite passed on the preceding head.Contributors
Riley Evans (@rllyy97) with GitHub Copilot.
Screenshots/Videos
Historical captures from the earlier focus-order correction (
0c4ba300a). They illustrate Settings retention, not proof of the current v2-only scope or current-head CI. Fresh behavior is covered by the production-browser and live checks above.Settings retained while switching between a scope and an action